#define QERROR_HOSTNAME_LOOKUP -21 /* Hostname lookup of server failed */
#define QERROR_ABORTED -22 /* TCP thread got a control-C */
#define QERROR_NO_SERVER -23 /* No AMarquee server at requested host/port */
#define QERROR_NO_INETD -24 /* The program wasn't launched by inetd */
#define QERROR_ACCESS_DENIED -25 /* The server wouldn't accept our connection */
/* Flags to use with QGo() */
#define QGOF_SYNC (1L<<0) /* Request notification via sync packet when all has settled on the server side */
#define QGOF_NOTIFY (1L<<1) /* Request notification via QERROR_SEND_DONE message when the TCP thread has finished sending this transaction (new for v47) */
/* Flags representing special privileges; used with QRequestPrivileges(), etc */
#define QPRIV_KILLCLIENTS (1L<<0) /* license to kill! */
#define QPRIV_ADMIN (1L<<1) /* Ability to set env vars, etc, on the server */
#define QPRIV_GETSYSMESSAGES (1L<<2) /* Ability to receive special sysadmin messages */
#define QPRIV_SENDSYSMESSAGES (1L<<3) /* Ability to send special sysadmin messages */
#define QPRIV_ALL ( 0x0F) /* all possible QPRIV_* bits */
/* All events from AMarquee come in this package! */
struct QMessage
{
struct Message qm_Msg;/* Don't directly use the contents of qm_Msg! */
LONG qm_ID; /* Message ID # of transaction related to this opCode, or -1 if no ID is applicable. */
int qm_Status; /* One of the QERROR_* codes defined in AMarquee headers. */
char * qm_Path; /* Pathname of a node, or NULL if not applicable. */
void * qm_Data; /* Pointer to beginning of data buffer, or NULL if not applicable. */
ULONG qm_DataLen; /* Length of qm_Data buffer, or 0 if not applicable. */
ULONG qm_ActualLen; /* Length of the data buffer stored on the AMarquee server. */
ULONG qm_ErrorLine; /* Line # of the server source code that generated the error. Useful for debugging. */
void * qm_Private; /* Private info used by FreeQMessage() */
};
struct QSession
{
struct MsgPort * qMsgPort; /* Wait() on this for QMessages! */